package com.bizmerce.rnd.oms.decision.criterion;

import java.util.ArrayList;
import java.util.List;

import com.bizmerce.rnd.oms.decision.data.BillOfMaterials;
import com.bizmerce.rnd.oms.decision.data.FreeTradeAgreement;
import com.bizmerce.rnd.oms.decision.data.RawMaterial;

/**
 * iMport Contents(MC법)
 * @author Gyeseon
 *
 */
public class iMportContents implements Criterion {

	private List<Criterion> relaxRuleList;
	
	/**
	 * MC법 
	 * 
	 * @param vom 비원산지재료의 가격: 사용한 비원산지 재료의 수입 시 과세가격 또는 이를 알 수 없거나 확인할 수 없는 경우,
	 *            당사국 내에서 지급한 재료의 최초 확인 가능한 가격을 말함
	 * @param exw 최종 작업 또는 가공을 거친 당사국 내의 제조자의 공장도 상품에 지급하였거나 지급해야 할 가격을 말함.
	 *            다만, 그 가격은 이 상품에 사용된 모든 재료의 가격을 포함하고, 이 상품의 수출 시 환급되는 내국세를 공제함
	 */
	public double iMportMethod(double vom, double exw) {
		return Math.floor(vom / exw * 100);
	}

	/**
	 * 중간재 규정을 사용할 수 있음
	 */
	public Boolean assign(BillOfMaterials bom) {
		double exwValue = bom.getSalePrice();
		double vomValue = 0.;
		List<RawMaterial> materials = bom.getRawMaterials();
		for (RawMaterial rawMaterial : materials) {
			if(rawMaterial.isNotIntraItem()) {
				vomValue +=  rawMaterial.getPurchasePrice();
			}
		}	
		boolean result = false;
		double value = Math.floor(vomValue / exwValue * 100);
		System.out.println("MC:" + vomValue + "/" + exwValue + "*100 = " + value);
		
		FreeTradeAgreement fta = bom.getFta();
		
		result = (value <= 45); //45% 협정마다 다름
		return result;
	}

	public void addRelaxRule(Criterion relaxRule) {
		if(relaxRuleList == null) {
			relaxRuleList = new ArrayList<Criterion>();
		}
	}
}
